package br.com.cubedesk.repositorio;

import br.com.cubedesk.entidades.Clientes;
import br.com.cubedesk.hibernate.NewHibernateUtil;
import br.com.cubedesk.interfaces.InterfaceCliente;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.hibernate.Session;

public class RepositorioCliente implements InterfaceCliente {

    @Override
    public void salvarCliente(String nomeFantaziaCliente, String enderecoCliente,
            String contatoCliente, String telefoneCliente1, String telefoneCliente2,
            String emailCliente, Integer statusCliente) {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Clientes clientes = new Clientes(nomeFantaziaCliente, enderecoCliente, contatoCliente,
                telefoneCliente1, telefoneCliente2, emailCliente, statusCliente, null);
        session.save(clientes);
        session.getTransaction().commit();
        JOptionPane.showMessageDialog(null, "Cliente adicionado com sucesso.");
        session.close();

    }

    @Override
    public void alterarCliente(Integer idCliente, String nomeFantaziaCliente, String enderecoCliente,
            String contatoCliente, String telefoneCliente1, String telefoneCliente2,
            String emailCliente, Integer statusCliente) {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        String query = "From Clientes";
        List<Clientes> list = (List<Clientes>) session.createQuery(query).list();
        for (Clientes c1 : list) {
            if (c1.getIdCliente() == idCliente) {
                c1.setNomeFantaziaCliente(nomeFantaziaCliente);
                c1.setEnderecoCliente(enderecoCliente);
                c1.setContatoCliente(contatoCliente);
                c1.setTelefoneCliente1(telefoneCliente1);
                c1.setTelefoneCliente2(telefoneCliente2);
                c1.setEmailCliente(emailCliente);
                c1.setStatusCliente(statusCliente);
                session.update(c1);
                session.getTransaction().commit();
                session.close();
            }
        }
        JOptionPane.showMessageDialog(null, "Cliente alterado com sucesso.");

    }

    @Override
    public LinkedList<Clientes> pegarTodosClientes() {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        LinkedList<Clientes> list = new LinkedList<>();
        List<Clientes> hh = (List<Clientes>) session.createQuery("From Clientes").list();
        for (Clientes c1 : hh) {
            list.add(c1);
        }
        session.flush();
        try {
            session.connection().commit();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        session.close();
        return list;
    }

    @Override
    public LinkedList<Clientes> pegarClientePorId(Integer idCliente) {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        LinkedList<Clientes> list = new LinkedList<>();
        List<Clientes> hh = (List<Clientes>) session.createQuery("From Clientes").list();
        for (Clientes c1 : hh) {
            if (c1.getIdCliente() == idCliente) {
                list.add(c1);
            }
        }
        session.flush();
        try {
            session.connection().commit();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        session.close();
        return list;
    }

    @Override
    public LinkedList<Clientes> pegarClientePorNome(String nomeFantazia) {
        Session session = NewHibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        LinkedList<Clientes> list = new LinkedList<>();
        List<Clientes> hh = (List<Clientes>) session.createQuery("From Clientes").list();
        for (Clientes c1 : hh) {
            if (c1.getNomeFantaziaCliente().contains(nomeFantazia)) {
                list.add(c1);
            }
        }   
        session.flush();
        try {
            session.connection().commit();
        } catch (SQLException ex) {
            Logger.getLogger(RepositorioCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        session.close();
        return list;
    }
}
